package com.example.demo.repository;

import com.example.demo.entity.CopyrightTransferEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 版权转让记录数据访问接口
 * <p>
 * Spring Data JPA会根据接口中定义的方法名称自动生成实现。
 * 继承JpaRepository后会自动拥有基本的CRUD操作方法，如save(), findById(), findAll()等。
 * </p>
 */
@Repository
public interface CopyrightTransferRepository extends JpaRepository<CopyrightTransferEntity, Long> {
    
    /**
     * 根据版权ID查找转让记录并按转让时间降序排序
     * <p>
     * 方法名解析：
     * - findBy: 定义这是一个查询方法
     * - CopyrightId: 查询条件，匹配CopyrightTransferEntity中的copyrightId字段
     * - OrderBy: 表示排序开始
     * - TransferTime: 排序字段
     * - Desc: 降序排序
     * 
     * 等效SQL: SELECT * FROM copyright_transfer WHERE copyright_id = ? ORDER BY transfer_time DESC
     * 
     * @param copyrightId 版权ID
     * @return 按转让时间降序排列的转让记录列表
     */
    List<CopyrightTransferEntity> findByCopyrightIdOrderByTransferTimeDesc(Long copyrightId);
    
    /**
     * 根据转让方地址查找转让记录并按转让时间降序排序
     * <p>
     * 等效SQL: SELECT * FROM copyright_transfer WHERE from_address = ? ORDER BY transfer_time DESC
     * 
     * @param fromAddress 转让方地址
     * @return 按转让时间降序排列的转让记录列表
     */
    List<CopyrightTransferEntity> findByFromAddressOrderByTransferTimeDesc(String fromAddress);
    
    /**
     * 根据接收方地址查找转让记录并按转让时间降序排序
     * <p>
     * 等效SQL: SELECT * FROM copyright_transfer WHERE to_address = ? ORDER BY transfer_time DESC
     * 
     * @param toAddress 接收方地址
     * @return 按转让时间降序排列的转让记录列表
     */
    List<CopyrightTransferEntity> findByToAddressOrderByTransferTimeDesc(String toAddress);

    /**
     * 根据状态查找转让记录并按转让时间降序排序
     * <p>
     * 等效SQL: SELECT * FROM copyright_transfer WHERE status = ? ORDER BY transfer_time DESC
     *
     * @param status 转让状态：0-进行中，1-成功，2-失败
     * @return 按转让时间降序排列的转让记录列表
     */
    List<CopyrightTransferEntity> findByStatusOrderByTransferTimeDesc(Integer status);

    /**
     * 通过版权ID和接收方地址以及状态查询转让记录，按转让时间倒序排序
     * @param copyrightId 版权ID
     * @param toAddress 接收方地址
     * @param status 状态
     * @return 转让记录列表
     */
    List<CopyrightTransferEntity> findByCopyrightIdAndToAddressAndStatusOrderByTransferTimeDesc(
            Long copyrightId, String toAddress, Integer status);
} 